/*
 * @lc app=leetcode.cn id=128 lang=typescript
 *
 * [128] 最长连续序列
 */

// @lc code=start

//  思想：哈希表
//  利用set查找是O(1)的特性，先去重，找到无左区间的数字，找其右区间的长度

//  复杂度：O(n) O(n)

function longestConsecutive(nums: number[]): number {
    if (nums.length < 1) return 0
    const set = new Set(nums)
    let res = 1

    for (let i = 0; i < nums.length; i++) {
        // 找到当前最小的
        if (!set.has(nums[i] - 1)) {
            let curNum = nums[i], curLen = 1
            // 找比其大的
            while (set.has(curNum + 1)) {
                curNum++
                curLen++
                res = Math.max(res, curLen)
            }
        }
    }

    return res
};
// @lc code=end

console.log(longestConsecutive([100, 4, 200, 1, 3, 2]));
console.log(longestConsecutive([0, 3, 7, 2, 5, 8, 4, 6, 0, 1]));
